# -*- coding: utf-8 -*-
"""
hooks.py —— WMS 应用的 Frappe Hook 配置文件

作用概述：
- 定义应用的基本元信息（名称、标题、发布者、描述、邮箱、许可证）。
- 配置应用的 UI 入口，包括左上角 Logo 与进入应用后的首页（Workspace）。
- 控制“应用中心”页面中本应用卡片的展示、跳转路由与权限校验。
- 为指定的库存相关 DocType 注入前端 JS（在打开表单时加载执行）。
- 绑定文档事件（on_submit / on_cancel），在单据生命周期关键节点触发后台处理逻辑。

维护建议：
- 保持路径与模块命名规范，所有引用的模块需存在且可导入。
- 注释全部采用中文，便于团队成员理解与维护。
- 修改后按规范执行构建与迁移命令，确保前端静态资源与数据库模型同步：
  bench build --app wms && bench migrate --app wms && bench clear-cache && bench clear-website-cache && bench restart
"""

# 引用包内版本号，供 Frappe 识别应用版本（通常定义在 __init__.py 或同级 __version__ 变量）
from . import __version__ as app_version

# 应用基础元信息（用于系统显示与元数据管理）
app_name = 'wms'                 # 应用名（内部标识，建议与包名一致）
app_title = 'WMS'                # 显示标题（在前端展示的名称）
app_publisher = "zhn"            # 发布者/维护者名称
app_description = "WMS"          # 简要描述（可用于应用信息展示）
app_email = "zhangning4615@163.com"  # 联系邮箱（用于问题反馈或支持）
app_license = "MIT"              # 许可证类型（遵循开源/版权要求）

# UI 入口配置
# app_logo_url：左上角 Logo 的图片地址（当前指向 Frappe 默认框架 Logo，可按需替换为本应用自有 Logo）
app_logo_url = "/assets/frappe/images/frappe-framework-logo.svg"
# app_home：进入应用后的默认首页（Workspace 路由），建议使用存在的工作空间名称以免 404
app_home = "/app/wms"

# Apps 页面相关配置
# ------------------

# required_apps：声明依赖的其他应用（若有强依赖可启用并填写），当前未使用
# required_apps = []

# add_to_apps_screen：控制“应用中心”页面的卡片展示列表
# 每个字典项都会作为一个应用卡片显示，点击后跳转到 route 指定的页面
add_to_apps_screen = [
	{
		"name": "wms",  # 应用内部名称
		"logo": "/assets/frappe/images/frappe-framework-logo.svg",  # 卡片图标（可替换为 WMS 专属图标）
		"title": "WMS",  # 卡片显示标题
		"route": "/app/wms",  # 点击卡片后的跳转路由（指向工作空间）
		"has_permission": "wms.api.permission.has_app_permission"  # 权限检查函数路径（需在对应 Python 模块中实现）
	}
]

# Fixtures：同步工作空间等静态数据（仅导出/同步本应用的 Workspace）
fixtures = [
	{"doctype": "Workspace", "filters": {"app": "wms"}}
]

# 前端脚本注入
# 说明：
# - app_include_js：若启用，可将打包后的 JS 注入到全局（当前保持注释，按需开启）。
# - doctype_js：为指定 DocType 注入页面级 JS 文件。当用户打开该 DocType 的表单视图时，自动加载并执行。
#   典型用途：前端交互增强、校验逻辑、界面定制、事件绑定等。
#app_include_js = ["wms.bundle.js"]

# doctype_js：将同一前端脚本绑定到四类库存相关单据
doctype_js = {
	"Stock Entry" : "public/js/wms.js",         # 库存调整/入库/出库等——打开表单时加载 wms.js
	"Delivery Note" : "public/js/wms.js",       # 发货单——打开表单时加载 wms.js
	"Purchase Receipt" : "public/js/wms.js",    # 采购收货——打开表单时加载 wms.js
	"Stock Reconciliation" : "public/js/wms.js" # 库存盘点——打开表单时加载 wms.js
}

# 文档事件钩子（doc_events）
# 说明：
# - 为上述四种 DocType 绑定提交与取消事件，触发后台逻辑。
# - on_submit：单据提交后执行，通常用于创建/更新仓库作业任务（如拣货、上架、复核）。
# - on_cancel：单据取消后执行，通常用于回滚/删除草稿任务，避免数据残留。
# - 引用的处理函数路径应存在于 wms 应用目录（通常为 apps/wms/wms/doc_events.py），否则会在运行时报导入错误。
doc_events = {
	"Stock Entry": {
		"on_submit": "wms.doc_events.update_warehouse_task",        # 提交库存调整/入库/出库时，更新/生成仓库任务
		"on_cancel": "wms.doc_events.delete_draft_warehouse_task",  # 取消时删除相关草稿任务，保持数据一致性
	},
	"Purchase Receipt": {
		"on_submit": "wms.doc_events.update_warehouse_task",        # 提交采购收货时，生成/更新上架等作业任务
		"on_cancel": "wms.doc_events.delete_draft_warehouse_task",  # 取消收货时回滚草稿任务
	},
	"Delivery Note": {
		"on_submit": "wms.doc_events.update_warehouse_task",        # 提交发货单时，生成/更新拣货/发运相关任务
		"on_cancel": "wms.doc_events.delete_draft_warehouse_task",  # 取消发货时清理草稿任务
	},
	"Stock Reconciliation": {
		"on_submit": "wms.doc_events.update_warehouse_task",        # 提交库存盘点时同步盘点任务或结果
		"on_cancel": "wms.doc_events.delete_draft_warehouse_task"   # 取消盘点时清理草稿数据
	}
}